<?php
namespace app\index\controller;

use app\common\controller\Base;
use app\common\model\ArtCate;
use app\common\model\Article;
use think\Db;
use think\facade\Request;
use think\facade\Session;
class Index extends Base
{
    public function index()
    {
        $cate_id = Request::param('cate_id', '');
        $this->view->assign('cateName', '全部帖子');
        if ($cate_id){
            $res = ArtCate::get($cate_id);
            if ($res){
                $this->view->assign('cateName', $res['name']);
            }
        }
        # 自己组装where或者像下面那样也是可以
        $where = [
            ['status', '=', '1']
        ];
        # 判断是否有搜索
        $keywords = Request::param('keywords', '');
        if ($keywords){
            $where[] = ['title', 'like', '%'.$keywords.'%'];
        }
        # 判断是否有分类id
        if ($cate_id){
            $where[] = ['cate_id', '=', $cate_id];
        }
        # 获取分类下的所有文章
//        $data = Article::all(function($query) use ($where){
//            $query->field(['id','title','title_img','user_id','create_time'])->where($where)->order('id desc')->paginate(3);
//        });
        $query = Db::name('article')
            ->field(['id','title','title_img','user_id','create_time','content','pv'])
            ->where('status', 1);
        if($cate_id){
            $query->where('cate_id', $cate_id);
        }
        if ($keywords){
            $query->where('title', 'like', '%'.$keywords.'%');
        }
        $data = $query->order('id desc')->paginate(3);
        $this->view->assign('data', $data);
        # 设置volist默认值  empty属性不支持直接传入html语法，但可以支持变量输出
        $this->view->assign('empty', '<h3>没有你要查询的东西</h3>');
        return $this->view->fetch();
    }

    public function hello($name = 'ThinkPHP5')
    {
        return 'hello,' . $name;
    }

    //  添加文章界面
    public function insert(){
        // 1.登陆才允许发布文章
        $this->isLogin();
        // 2.设置页面标题
        $this->view->assign('title','发布文章');
        // 3.获取栏目信息,这个在公共控制器中已经获取了
//        $cateList = ArtCate::all(function($query){
//            $query->field(['id','name']);
//        });
//        if (count($cateList) <= 0){
//            $this->error('请先添加栏目','index/index');
//        }
//        $this->view->assign('cateList', $cateList);
        // 4.发布界面渲染
        return $this->view->fetch();
    }

    public function save(){
        if ( ! Request::isPost()){
            $this->error('请求类型错误');
        }
        $data = Request::post();

        // 图片上传验证
        # 获取一下上传的图片信息
        $file = Request::file('title_img');
        # 文件信息验证成功后，再上传到服务器上的指定目录，以public为起始目录
        $info = $file->validate([
            'size'=>1000000,'ext'=>'jpge,jpg,png,gif'
        ])->move('uploads/');
        if ( ! $info){
            $this->error($file->getError());
        }
        # 填充验证数据
        $data['title_img'] = $info->getSaveName();
        $data['user_id'] = Session::get('user_info')->id;
        # 数据验证
        $res = $this->validate($data, 'app\common\validate\Article');
        if (true !== $res){
            $this->error($res);
        }
        # 保存数据
        if( ! Article::create($data)){
            $this->error('发布文章失败，请稍后再试');
        }
        $this->success('发布成功','index/index');
    }

    # 详情
    public function details(){
        $id = Request::param('id', '');
        if (empty($id)){
            $this->error('非法请求');
        }
        $art = Article::get(function ($query) use($id) {
            $query
                ->field(['id','title','title_img','user_id','create_time','content','cate_id','pv','user_id'])
                ->find($id)->setInc('pv');
        });
        $this->assign('art', $art);
        return $this->view->fetch();
    }

    # 收藏与取消收藏
    public function doFav(){
        if ( ! Request::isAjax()){
            $this->error('非法请求');
        }
        $this->isLogin();
        $article_id = Request::param('article_id', '');
        if (empty($article_id)){
            return ['status'=>0, 'msg'=>'非法请求'];
        }
        $user_info = Session::get('user_info');
        $fav = Db::name('user_fav')
            ->where('user_id', $user_info['id'])
            ->where('art_id', $article_id)->find();
        if (is_null($fav)){
            # 不存在就添加
            Db::name('user_fav')->data([
                'user_id'=>$user_info['id'], 'art_id'=>$article_id
            ])->insert();
            return ['status'=>1, 'msg'=>'收藏成功'];
        }else{
            # 存在就删除
            Db::name('user_fav')->delete($fav['id']);
            return ['status'=>2, 'msg'=>'已取消'];
        }
    }
}
